package util

import (
	"io"
	"log"
	"net"
	"os"
)

func T_netcat3()  {
	conn, err := net.Dial("tcp", "localhost:8000")
	if err != nil {
		log.Fatal(err)
	}

	done := make(chan struct{})
	go func() {
		log.Println("this is another routine")
		io.Copy(os.Stdout, conn) // ignoring errors
		log.Println("done")
		done <- struct{}{}
	}()

	mustCopy(conn, os.Stdin)  // main routine从标准输入读取 到 connection  [ 同一个包里可以允许被其它文件调用的方法名不大写吗？
	log.Println("about to close conn ...")
	conn.Close() // 这里调关闭，导致上面的routine Copy返回error
	<- done // 上面的routine写入了内容，它才返回，即main routine等待background routine结束
}
